package almacenamiento;

import procesamiento.utilidadesPartida;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class Datos extends SQLiteOpenHelper {

	String tablaUsuarios = "CREATE TABLE Usuarios (nombre TEXT PRIMARY KEY, " +
			"edad TEXT, peso TEXT, contraseña TEXT, correo TEXT)"; 
	
	String tablaPartidas = "CREATE TABLE Partidas (idPartida INTEGER " +
			"PRIMARY KEY AUTOINCREMENT,nombre REFERENCES " +
			"Usuarios(nombre), nivel INTEGER, ultPruebaOk INTEGER, " +
			"premio1 INTEGER NOT NULL, premio2 INTEGER NOT NULL, " +
			"premio3 INTEGER NOT NULL, premio4 INTEGER NOT NULL, " +
			"premio5 INTEGER NOT NULL, premio6 INTEGER NOT NULL, " +
			"premio7 INTEGER NOT NULL, premio8 INTEGER NOT NULL, " +
			"premio9 INTEGER NOT NULL, premio10 INTEGER NOT NULL, " +
			"premio11 INTEGER NOT NULL, premio12 INTEGER NOT NULL," +
			"premio13 INTEGER NOT NULL, premio14 INTEGER NOT NULL," +
			"premio15 INTEGER NOT NULL)";
	
	static Datos conexion = null;
	private SQLiteDatabase tabla;
	
	
	private Datos(Context context, String name, int version) {
		super(context, name, null, version);
	}
	
	public synchronized static Datos conectarBaseDatos
	(Context cont) {
	if(conexion == null) {
		conexion = new Datos(cont.getApplicationContext(), "BBDDPFC",
				3);
	}
	return conexion;
}


	@Override
	public void onCreate(SQLiteDatabase baseDatos) {
		
		baseDatos.execSQL(tablaUsuarios);
		baseDatos.execSQL(tablaPartidas);
		
	}

	@Override
	public void onUpgrade(SQLiteDatabase baseDatos, int oldVersion, 
			int newVersion) {
		
		baseDatos.execSQL("DROP TABLE IF EXISTS Usuarios");
		
		baseDatos.execSQL(tablaUsuarios);
		
		baseDatos.execSQL("DROP TABLE IF EXISTS Partidas");
		
		baseDatos.execSQL(tablaPartidas);
		
	}
	
	public void añadirUsuario(String nombre, String peso, String edad, 
			String correo, String contraseña) {
		ContentValues nuevoUsuario = new ContentValues();
		nuevoUsuario.put("nombre", nombre);
		nuevoUsuario.put("peso", peso);
		nuevoUsuario.put("edad", edad);
		nuevoUsuario.put("correo", correo);
		nuevoUsuario.put("contraseña", contraseña);
		
		if(tabla == null || !tabla.isOpen()) {
			tabla = getWritableDatabase();
		}
		tabla.insert("Usuarios", null, nuevoUsuario);
		tabla.close();
	}
	
	public Jugador devolverUsuario(String nombre) {
		Jugador usuario = null;
		String [] campos = new String [] {"nombre", "edad", "peso", 
				"contraseña", "correo"};
		String [] valores = new String [] {nombre};
					
		if(tabla == null || !tabla.isOpen()) {
			tabla = getReadableDatabase();
		}
		
		Cursor cursor = tabla.query("Usuarios", campos, "nombre = ?", 
							valores, null, null, null);
					
		if (cursor.moveToFirst()) {
			usuario = new Jugador(cursor.getString(0), cursor.getString(1), 
					cursor.getString(2), cursor.getString(3), 
					cursor.getString(4));
		}
		cursor.close();
		tabla.close();
		return usuario;
	}
	
	public void añadirPartida(String nombre) {
		ContentValues nuevaPartida = new ContentValues();
		nuevaPartida.put("nombre", nombre);
		nuevaPartida.put("nivel", 1);
		nuevaPartida.put("ultPruebaOK", 0);
		nuevaPartida.put("premio1", 0);
		nuevaPartida.put("premio2", 0);
		nuevaPartida.put("premio3", 0);
		nuevaPartida.put("premio4", 0);
		nuevaPartida.put("premio5", 0);
		nuevaPartida.put("premio6", 0);
		nuevaPartida.put("premio7", 0);
		nuevaPartida.put("premio8", 0);
		nuevaPartida.put("premio9", 0);
		nuevaPartida.put("premio10", 0);
		nuevaPartida.put("premio11", 0);
		nuevaPartida.put("premio12", 0);
		nuevaPartida.put("premio13", 0);
		nuevaPartida.put("premio14", 0);
		nuevaPartida.put("premio15", 0);
		
		if(tabla == null || !tabla.isOpen()) {
			tabla = getWritableDatabase();
		}
		
		tabla.insert("Partidas", null, nuevaPartida);
		tabla.close();
	}
	
	public partida devolverPartida(String nombre) {
		partida partidaJuego = null;
		String [] campos = new String [] {"idPartida", "nombre", "nivel", 
				"ultPruebaOK", "premio1", "premio2", "premio3", "premio4", 
				"premio5", "premio6", "premio7", "premio8", "premio9", 
				"premio10", "premio11", "premio12", "premio13", "premio14",
				"premio15"};
		String [] valores = new String [] {nombre};
		
		if(tabla == null || !tabla.isOpen()) {
			tabla = getReadableDatabase();
		}
		
		Cursor cursor = tabla.query("Partidas", campos, "nombre = ?", 
				valores, null, null, null);
		
		if (cursor.moveToFirst()) {
			partidaJuego = new partida(Integer.parseInt(cursor.getString(0)),
					cursor.getString(1),
					Integer.parseInt(cursor.getString(2)), 
					Integer.parseInt(cursor.getString(3)), 
					utilidadesPartida.convertirIntBoolean(
							Integer.parseInt(cursor.getString(4))), 
					utilidadesPartida.convertirIntBoolean(
							Integer.parseInt(cursor.getString(5))), 
					utilidadesPartida.convertirIntBoolean(
							Integer.parseInt(cursor.getString(6))),
					utilidadesPartida.convertirIntBoolean(
							Integer.parseInt(cursor.getString(7))),
					utilidadesPartida.convertirIntBoolean(
							Integer.parseInt(cursor.getString(8))),
					utilidadesPartida.convertirIntBoolean(
							Integer.parseInt(cursor.getString(9))),
					utilidadesPartida.convertirIntBoolean(
							Integer.parseInt(cursor.getString(10))),
					utilidadesPartida.convertirIntBoolean(
							Integer.parseInt(cursor.getString(11))),
					utilidadesPartida.convertirIntBoolean(
							Integer.parseInt(cursor.getString(12))),
					utilidadesPartida.convertirIntBoolean(
							Integer.parseInt(cursor.getString(13))),
					utilidadesPartida.convertirIntBoolean(
							Integer.parseInt(cursor.getString(14))),
					utilidadesPartida.convertirIntBoolean(
							Integer.parseInt(cursor.getString(15))),
					utilidadesPartida.convertirIntBoolean(
							Integer.parseInt(cursor.getString(16))),
					utilidadesPartida.convertirIntBoolean(
							Integer.parseInt(cursor.getString(17))),
					utilidadesPartida.convertirIntBoolean(
							Integer.parseInt(cursor.getString(18))));
		}
		cursor.close();
		tabla.close();
		return partidaJuego;
	}
	
	public void actualizarJugador(String[] datos, String nombre){
		String[] argumento = {nombre};
		ContentValues valores = new ContentValues();
		if (!datos[0].equals("")) valores.put("nombre", datos[0]);
		if (!datos[1].equals("")) valores.put("contraseña", datos[1]);
		if (!datos[2].equals("")) valores.put("peso", datos[2]);
		if (!datos[3].equals("")) valores.put("edad", datos[3]);
		if (!datos[4].equals("")) valores.put("correo", datos[4]);
		
		if(tabla == null || !tabla.isOpen()) {
			tabla = getWritableDatabase();
		}
		
		tabla.update("Usuarios", valores, "nombre = ?", argumento);
		tabla.close();
	}
	
	public void actualizarPartida(String[] datos, String nombre) {
		String[] argumento = {nombre};
		ContentValues valores = new ContentValues();
		if (!datos[0].equals("")) valores.put("nombre", datos[0]);
		if (!datos[1].equals("")) valores.put("nivel", datos[1]);
		if (!datos[2].equals("")) valores.put("ultPruebaOK", datos[2]);
		if (!datos[3].equals("")) valores.put("premio1", datos[3]);
		if (!datos[4].equals("")) valores.put("premio2", datos[4]);
		if (!datos[5].equals("")) valores.put("premio3", datos[5]);
		if (!datos[6].equals("")) valores.put("premio4", datos[6]);
		if (!datos[7].equals("")) valores.put("premio5", datos[7]);
		if (!datos[8].equals("")) valores.put("premio6", datos[8]);
		if (!datos[9].equals("")) valores.put("premio7", datos[9]);
		if (!datos[10].equals("")) valores.put("premio8", datos[10]);
		if (!datos[11].equals("")) valores.put("premio9", datos[11]);
		if (!datos[12].equals("")) valores.put("premio10", datos[12]);
		if (!datos[13].equals("")) valores.put("premio11", datos[13]);
		if (!datos[14].equals("")) valores.put("premio12", datos[14]);
		if (!datos[15].equals("")) valores.put("premio13", datos[15]);
		if (!datos[16].equals("")) valores.put("premio14", datos[16]);
		if (!datos[17].equals("")) valores.put("premio15", datos[17]);
		
		if(tabla == null || !tabla.isOpen()) {
			tabla = getWritableDatabase();
		}
		
		tabla.update("Partidas", valores, "nombre = ?", argumento);
		tabla.close();
	}
	
	public void eliminarJugador(String nombre) {
		String[] argumento = {nombre};
		if(tabla == null || !tabla.isOpen()) {
			tabla = getWritableDatabase();
		}
		tabla.delete("Usuarios", "nombre = ?", argumento);
		tabla.close();
	}
	
	public void eliminarPartida(String nombre) {
		String[] argumento = {nombre};
		if(tabla == null || !tabla.isOpen()) {
			tabla = getWritableDatabase();
		}
		tabla.delete("Partidas", "nombre = ?", argumento);
		tabla.close();
	}
	
	
}
